package ch4;

public class BitCalc {

	public static void main(String[] args) {
		// 位运算 & ， |, ^ ,~
		// 人类理解的是十进制的运算（0-9）
		// 计算机中，只能处理二进制 0,1(逢二进1)
		// 16进制（0-15组成，4个二进制位）0-9A-F组成，8进制（3个二进制，0-7）
		// boolean值位运算，true 是1，false是0
		int i = 0X16;// 16进制：22
		int j = 016;// 8进制：14
		int k = 0b1111000;
		System.out.println("i=" + i + ",j=" + j);
		System.out.println("k=" + k);
		System.out.println(">>>>>>>>>>>>>>>>>>>>>>");
		// 符号位
		// 一个int,4个byte,32位，最高位做符号位。。。。0：正数，1负数
		// 补码：正数的补码是她的二进制格式
		// 负数的补码是她的绝对值的反码+1
		int a = 5;// 101
		int b = 11;// 1011
		int c = a & b;
		System.out.println("c=" + c);
		int c2 = a | b;
		System.out.println("c2=" + c2);
		int c3 = a ^ b;
		System.out.println("c3=" + c3);// 14
		int c4 = ~b;// 取反
		System.out.println("c4=" + c4);
		System.out.println(Integer.toBinaryString(c4));
		System.out.println(Integer.toBinaryString(b));
		// 1111111111111111111111111111 : -1:
		System.out.println(Integer.toBinaryString(-1));
		System.out.println(Integer.MAX_VALUE + 1);// 溢出

		System.out.println(">>>>>>>>>>>>>>>>>>>>>>.");
		int c5 = 23;// 10111
		int c6 = c5 >> 2;
		int c7 = c5 << 27;
		System.out.println(c6);// 5
		System.out.println(c7);
		c5 = -23;
		int c8 = c5 >>> 1;// 无符号右移
		System.out.println(c8);
		System.out.println(">>>>>>");
		//
		String str = null;
		boolean ff = (str != null) & (str.length() > 4);
		System.out.println(ff);
	}

}
